/* 数论
* 1.筛质数--埃式筛法 nloglogn st[]中是质数
    for(int i = 2; i <= n; i++){
        if(!st[i]) primes[cnt++] = i;
        for(int j = 2*i; j <= n; j++)
            st[j] = true;
    }

    线性筛法
    for(int i = 2; i <= n; i++){
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j]*i <= n; j++)
        {
            st[primes[j]*i] = true;
            if(i % primes[j] == 0) break;
        }
    }

* 本题:
    50000^2 > max_INT, 相邻质数<50000
    1.找出[1, 50000]中的所有质因子
    2.对于[1, 50000]中的每个质数p，将[L, R]中所有p的倍数(合数)筛掉，剩下的就是质数
    x属于[l, r]且是合数->[1, 50000]中必定存在一个质数p使得 x%p == 0
    [1, 50000]中任意一个质数p都不能使得 x%p == 0 -> x是质数
*/

// #define DEBUG
#pragma GCC optimize("O1,O2,O3,Ofast")
#pragma GCC optimize("no-stack-protector,unroll-loops,fast-math,inline")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,ssse3")


#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

#define int long long

const int N = 1e6+10;
int primes[N], cnt;
bool st[N];

void init(int n)
{
    memset(st, 0, sizeof st);
    cnt = 0;
    for(int i = 2; i <= n; i++){
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j]*i <= n; j++)
        {
            st[primes[j]*i] = true;
            if(i % primes[j] == 0) break;
        }
    }
}

signed main()
{
    #ifdef DEBUG
        freopen("./in.txt", "r", stdin);
    #else
        ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #endif

    int l, r; 
    while(scanf("%d %d", &l, &r) != -1)
    {
        init(50000);
        memset(st, 0, sizeof st);

        for(int i = 0; i < cnt; i++){
            int p = primes[i];
            // 找到>=l的最小的p的倍数 l+p-1 和埃式筛比较(p本身是素数,存在的最小合数是2p)
            for(int j = max(p*2, ((l+p-1) /p) *p); j<=r; j+=p)
                st[j-l] = true;
        }
        
        cnt = 0;
        for(int i = 0; i <= r-l; i++)
            if(!st[i] && i + l >= 2)
            {    primes[cnt++] = i + l;
            }
        if(cnt < 2) puts("There are no adjacent primes.");
        else{
            int minp = 0, maxp = 0;
            for(int i = 0; i + 1 < cnt; i++)
            {
                int d = primes[i+1] - primes[i];
                if(d < primes[minp+1] - primes[minp]) minp = i;
                if(d > primes[maxp+1] - primes[maxp]) maxp = i;
            }
        
            printf("%d,%d are closest, %d,%d are most distant.\n",
                primes[minp], primes[minp+1], primes[maxp], primes[maxp+1]);
        }
    }
    return 0;
}
// 